<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
    <body bgcolor="white">
        Interfaces for creating new rankings and transformer. <code>RankingBuilder</code>
        feeds the list of available rankings. The default rankings include for
        instance 'Degree' or numerical attribute columns. Transformers apply for
        instance color or size transformation to objects.
        <h3>Create a new Transformer</h3>
        <ol><li>Create a new module and set <code>RankingAPI</code>, <code>GraphAPI</code>
                and <code>Lookup</code> as dependencies.</li>
            <li>Create a new builder class by implementing <code>TransformerBuilderr</code>,
            this class is basically a factory that will create the transformer on demand.</li>
            <li>Add <b>@ServiceProvider</b> annotation to your builder, that it can
                be found by the system. Set <code>TransformerBuilder</code> as the
                annotation parameter. You can also add a position to define the order
                your transformer should be displayed. Put 1000 to be displayed after
                the default one.</li>
            <li>Implement the <code>isTransformerForElement()</code> method. If your
                transformer manipulates both nodes and edges, return <code>true</code>
                when the element type is <code>Ranking.NODE_ELEMENT</code> or
                <code>Ranking.EDGE_ELEMENT</code>. If it manipulates only one element,
                restrict in consequences.</li>
            <li>Create a new class that implements <code>Transformer</code>. One can
                add a dependency to the RankingPlugin module and extends the
                <code>AbstractRanking</code>.</li>
            <li>Configure the Target type of you transformer. If your transformer works only
                with nodes, put <code>NodeData</code>, if it works only with edges, put
                <code>EdgeData</code>. If it works with both, put <code>Renderable</code> or
                <code>Attributable</code>. These are interfaces both nodes and edges implement.</li>
            <li>Implement the <code>transform()</code> method of the transformer.</li>
            <li>If the transformer needs an UI, create a new class that implements the
                <code>TransformerUI</code> interface. Add <b>@ServiceProvider</b> annotation
                to your class, that it can be found by the system. Set <code>TransformerUI</code>
                as the service annotation parameter.</li>
            <li>Configure the <code>isUIForTransformer()</code> to return <code>true</code> only
                when the given transformer is an instance of the Transformer you defined earlier.</li>
            <li>Implement a user interface and set the <code>getPanel()</code> method to return it.</li>
        </ol>
    </body>
</html>
